package com.lengxf.flink.source;

import org.apache.flink.streaming.api.datastream.DataStreamSource;
import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment;
import org.apache.flink.streaming.runtime.partitioner.StreamPartitioner;

/**
 * 分区测试demo
 *
 * @author Lengxf
 */
public class PartitionDemo {

    public static void main(String[] args) throws Exception {
        StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
        env.setParallelism(2);
        DataStreamSource<String> lineDS = env.readTextFile("flink/src/main/resources/word.txt");

        //随机分区  random.nextInt 下游算子并行度
        //lineDS.shuffle().print();

        //数据源倾斜的时候 适合使用此方式
        //轮训策略 (this.nextChannelToSendTo + 1) % this.numberOfChannels;
        //lineDS.rebalance().print();

        //缩放轮训  实现轮训 局部组队 ， 比rebalance更加高效
        //lineDS.rescale().print();

        //广播  发送给下游所有的子任务
        lineDS.broadcast().print();

        /**
         *  {@link StreamPartitioner
         *  所有的分区逻辑可以参考这个方法里的实现
         */

        env.execute();
    }


}
